<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Milis Linux</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="" />
<meta name="author" content="m.numan.ince" />

<link rel="canonical" href="https://www.milislinux.org/" />

<link rel="stylesheet" type="text/css" href="/css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="/css/font-awesome.css" />
<link rel="stylesheet" type="text/css" href="/css/theme.css" />
<link rel="stylesheet" type="text/css" href="/css/markdown.css" />

<script src="/js/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="/js/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>

<style>
	body {
		background-color: #5D6C53;
	}
	.text-center a {
		color:black;
	}
	.milis-info {
        color: black;
    }
</style>

</head>
<body>
  
  <?php include "../header.html"; ?>


<div id="home" class="headline-container jumbotron">
	
	<p>
	
	<div class="markdown-body">
	<b>	
	<!-- ------------------------------------------------------------------------------------------------ -->
	<h2 class="title">Milis Paket Sistemi - Temel Komutlar</h2>
	Milis Paket Sistemi (MPS), Milis işletim sisteminin kendine özgü sıfırdan bash betik dilinde yazılmış paket yöneticisidir. MPS ile talimatnamedeki talimatları kullanarak paket üretebilir,paket kurabilir, kaldırabilir ve güncelleyebilirsiniz.

	Aşağıda bazı temel komutlar ve kullanımlarını görebilirsiniz:

	<b>İkili paket veritabanını ve talimatnamenin güncellenmesi:</b>
	<pre>$ mps guncelle</pre>
	<b>Sistemdeki tüm paketlerin güncellenmesi:</b>
	<pre>$ mps yukselt</pre>
	<b>Dosyadan veya depodan paket kurulumu:</b>
	<pre>$ mps kur paket_adi / paket_adi.mps.lz </pre>
	<b>Bir paketin silinmesi:</b>
	<pre>$ mps sil paket_adi</pre>
	<b>Bir paketin güncellenmesi:</b>
	<pre>$ mps -g paket_adi</pre>
	<b>Paket arama:</b>
	<pre>$ mps ara paket_adi</pre>
	
	<!-- ------------------------------------------------------------------------------------------------ -->
	<h2 class="title">Milis Paket Sistemi - Ek Komutlar</h2>
	Milis Paket Sistemi (MPS) Bash tabanlıdır ve modüler şekilde tasarlanmıştır. Yani her bir işlevi yerine getiren bağımsız bir modül vardır ve bir modül diğer modülleri geliştirmek için kullanılabilir. Bu modüller sistemde kayıtlı parametreleri kullanılarak özyinelemeli olarak çağırılırlar. Modülleri çağıran parametrelere "API Parametreler" adı verilir ve tire işaretiyle başladığından son kullanıcı parametrelerinden ayrılırlar. Bu parametreleri geliştirme dışında ileri kullanım ya da hata ayıklama amacı ile de kullanabilirsiniz.

	Aşağıda bazı API Parametreleri ve kullanımlarını görebilirsiniz:

	<b>İkili paket veritabanini gunceller:</b>
	<pre>$ mps -G</pre>
	<b>Git sunucusundan talimatname ve sistem günceller:</b>
	<pre>$ mps -GG</pre>
	<b>İlgili paketi bağimlılıklarıyla ağdan çekip kurar:</b>
	<pre>$ mps kur paket_ismi</pre>
	<b>İlgili paketi kaldırır:</b>
	<pre>$ mps sil paket_ismi</pre>
	<b>sadece ilgili paketi günceller:</b>
	<pre>$ mps -g paket_ismi</pre>
	<b>ilgili paketi tüm bağımlılıklarıyla günceller:</b>
	<pre>$ mps -go paket_ismi</pre>
	<b>ilgili paketin ana bağımlılıklarını siler.(masaüstü veya blok programları kaldırmak için):</b>
	<pre>$ mps -S paket_ismi</pre>
	<b>Yereldeki paketi bagimliliksiz kurar:</b>
	<pre>$ mps -k paket_ismi</pre>
	<b>Kurulu paket listesini verir:</b>
	<pre>$ mps -kl</pre>
	<b>İlgili paketin kurulu olma durumunu verir:</b>
	<pre>$ mps -kk paket_ismi</pre>
	<b>İlgili paketin talimat dosyasına göre bağımlıksız derler,paketler:</b>
	<pre>$ mps -d paket_ismi</pre>
	<b>İlgili paketin talimat dosyasına göre bağımlıklarıyla derler,paketler:</b>
	<pre>$ mps -derle paket_ismi</pre>
	<b>İlgili paketin talimat dosyasına göre bağımlıkları kontrol eder kurar olmayanı paketler:</b>
	<pre>$ mps odkp paket_ismi</pre>
	<b>bir dosyanın hangi kurulu pakette olduğunu bulur:</b>
	<pre>$ mps -hp aranacak_dosya</pre>
	&nbsp;
	
	<!-- ------------------------------------------------------------------------------------------------ -->
	<h2 class="title">Milis Linux Temel Kurulum Yönergeleri</h2>
	Çalışan iso'dan direk sistemi hedef disk bölümünüze kurabilirsiniz.Ayrıca o an çalışan iso üzerinde yaptığınız ayarlamalar da kaybolmayacak ve o şekilde kurulacaktır.
	Yeni bir terminal açıp ve aşağıdaki yönergeleri takip ederek de sistem kurulumunu yapabilirsiniz.Bu kurulum tipi deneyim gerektirmektedir. 
	Oluşabilecek veri kayıplarına karşı önceden yedek alınız.
	<br><br>
	1-hedef disk bolumunu formatla
	<pre>$ mkfs.ext4 /dev/sdax</pre>
	2-bolumu /mnt altına bagla
	<pre>$  mount /dev/sdax /mnt</pre>
	3-mevcut dosya sistemini hedefe kopyala
	<pre>$ cp -axvnu /  /mnt</pre>
	4-initramfs ( baslatici) oluştur
	<pre>$ mount --bind /dev /mnt/dev</pre>
	<pre>$ mount --bind /sys /mnt/sys</pre>
	<pre>$ mount --bind /proc /mnt/proc</pre>
	<pre>$ chroot /mnt dracut -N --force --xz --omit systemd  /boot/initrd-$(ls /boot/kernel-* | head -n1 |cut -d'-' -f2)</pre>
	5-gerekli grub ayarlarını yap.
	<pre>$ grub-install --boot-directory=/mnt/boot /dev/sdy</pre>
	<pre>$ chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg</pre>
	
	
	<!-- ------------------------------------------------------------------------------------------------ -->
	<h2 class="title">Milis Linux Talimatname Bilgi</h2>
	<b>Talimat dosyası nedir ?</b><br>

	Milis Linux’ta paket üretmek oldukça kolaylaştırılmıştır. 
	Milis Linux’ta paketler talimat dosyaları sayesinde üretilir. 
	Talimat dosyası bir paketin nasıl derleneceğini,paketleneceği, gerekli olan bağımlılıkları, 
	paketçinin adı, paketin adı açıklaması ve versiyon numarası gibi bilgileri barındırır. 
	Mps paket yöneticisi de bu talimat dosyasını kullanarak paketi oluşturur.

	<br><br>

	<b>Talimat dosyası nasıl oluşturulur?</b><br>
	/root dizini altında “talimatname” adında bir dizin vardır. (Derleme ortamında ortamın /root dizini altına bakılmalıdır.) 
	Bu dizin içerisinde ise genel, onsistem, temel adında dizinler vardır. 
	Genel olarak sonradan oluşturacağımız talimat dosyaları, genel dizininin içindeki paket adı yazılı olan 
	dizinlerin içinde yer almaktadır. 
	Bu talimat dosyalarını örnek alarak kendi istediğiniz bir paketin talimat dosyasını oluşturabilirsiniz.
	Sıfırdan bir talimat oluşturmadan önce mevcut dağıtımlarda nasıl oluşturulmuş olmasına bakılması sağlıklı bir yoldur. 
	Milis Linux talimat yapısına benzer dağıtımların üretimleri incelenerek talimat oluşturalabilinir. 
	Ancak burada dikkat edilmesi gereken hususlar vardır. 
	Örneğin diğer dağıtımlardaki bağımlılıklar Milis Linux deposunda farklı bir isimde oluşturulmuş olabilir 
	veya bağımlılıklar depoda olmayabilir. Bu durumda olmayan bağımlılıkların da talimat oluşturularak paketlenmesi gerekir.
	Talimat dosyası oluşturulurken hangi paketi üreteceksek ilgili paketin web sitesinde yada indirdiğimiz 
	kaynak kodunda genelde gerekli olan bağımlılıklar, paketin nasıl derleneceği vs. bilgiler çoğu zaman verilmektedir. 
	Bunlardan yararlanarak da sıfırdan talimat dosyası oluşturabiliriz.
	
	<!-- ------------------------------------------------------------------------------------------------ -->
	<h2 class="title">Milis Linux Derleme Ortamı Kurulumu</h2>

	Milis Linux'ta paketleme yapmak ve paket deposuna katkıda bulunmak için öncelikle paketleri derleyebileceğiniz derleme ortamını oluşturmanız gerekmektedir. 
	Derleme ortamını paketlerin yalıtılmış bir ortamda derlendiği <u>chroot</u> ortamı olarak düşünebiliriz.

	Daha önceki ortam kurulumlarımız elle adımlara dayanmakta iken artık tek komutla ortamı indirip kurabiliriz.
	<p>
	<pre>$ mps guncelle </pre>
	<pre>$ sudo mpsdo</pre>
	<p>
	Bu adımdan sonraki işlemler ortam içinde olacaktır.
	<p>
	Paketleme ortamından çıkıldığında tüm dosyalar sıfırlandığından dolayı ortama girdiğimizde /opt dizini altında işlemlerimizi gerçekleştiririz.
	Bu dizinde üretilen paketler ana sistem de /mnt/paketler altında kalıcı olmaktadır.
	<pre># cd /opt</pre>
	Ortama her girişimizde ortam sıfırlanacağı için ortamı güncellemek zorundayız.
	<pre># mps guncelle</pre>
	Ortamda paket derlemek için konak bilgisayarın <b>/mnt/lfs/root/talimatname/genel</b> altındaki dizinleri kullanırız.
	Gerekli değişiklikleri yaptıktan sonra tekil derleme için
	<pre># mps -d paket_ismi</pre>
	Sıralı derle-kur-paketle işlemleri için
	<pre># mps odkp paket_ismi</pre>
	komutlarını veriririz.
	Ortamdan çıkmak için
	<pre># exit</pre>



	<!-- ------------------------------------------------------------------------------------------------ -->
	<br><h2 class="title">Talimat Dosyası Standartları ve Talimat Hazırlama</h2>
	  Talimat hazırlamak Milis içerisinde kullanılacak uygulamayı veya dosyaları paketlemek için gerekli komutları yazmak / hazırlamak demektir.
	Talimatta işlem sırası şu şekildedir:<br>
	  <ol>
		<li>Kaynak kodları içeren dosyaların $SRC (/tmp/work/src/) klasörüne indirilmesi ve açılması</li>
		<li>Derleme yapılacak ise kaynak kodun derlenmesi</li>
		<li>İşlemleri tamamlanan ve/veya derlenen uygulamanın $PKG klasörüne hiyerarşisi bozulmadan alınması</li>
		<li>Son olarak da $PKG (/tmp/work/pkg/) klasörünün sıkıştırılarak paketin oluşturulması (xxx.mps.lz)</li>
	  </ol>
	  
	Talimatlar https://notabug.org/milislinux/milis/src/master/talimatname/ adresinde 3 ana kategoride tutulmaktadır. Kullanıcılar tarafından hazırlanan
	talimatlar "genel" kategorisinde yer alır. Mevcut tüm uygulamaların nasıl paketlendiğini yani talimat dosyalarını bu adresten inceleyebilirsiniz.
	<br><br>
	Örnek talimat dosyası:
	<pre>
	# Tanım: Ses dosyalarını düzenlemek için gelişmiş bir araç.
	# URL: http://web.audacityteam.org/
	# Paketçi: milisarge
	# Gerekler: libvorbis libmad libid3tag wxgtk28 lame hicolor-icon-theme ffmpeg shared-mime-info desktop-file-utils redland jack soundtouch cmake zip python
	# Grup: medya

	isim=audacity
	surum=2.1.1
	devir=1
	kaynak=("https://github.com/audacity/audacity/archive/Audacity-${surum}.tar.gz"
			"ffmpeg.patch")

	derle() {
	  cd "${SRC}/${isim}-Audacity-${surum}"
	  patch -p1 -i "${SRC}/ffmpeg.patch"
	  WX_CONFIG=/usr/bin/wx-config-2.8 \
	  ./configure --prefix=/usr --enable-unicode --with-wx-config=$WX_CONFIG
	  make
	 
	  make DESTDIR="${PKG}" install
	}
	</pre>

	Linux dağıtımlarda popüler bir uygulama olan ses düzenleme uygulaması <b>Audacity</b>'nin paketlenmesi işlemlerini adım adım inceleyelim.
	<br><br>
	   Talimat dosyaları birer bash script dosyalarıdır fakat belirli standartları bulunmaktadır.
	Talimat dosyasının # ile başlayan ve bash scriptte yorum kabul edilen kısımları talimatın bilgi kısmıdır. Bu bilgilerden <u>Gerekler</u> ve <u>Grup</u> kısımları
	ilgili paketin ihtiyaç duyduğu yani bağımlısı olduğu diğer paketlerin adını ve paketin kategorisini içermelidir. Örneğimiz de gereklerin büyük kısmı ses düzenleme 
	özelliğinden dolayı müzik formatlarının dönüştürülmesi ile ilgili fakat paketin derlenmesi için gerekli diğer paketler de yine gerekler de yer almıştır.
	<br><br>
	   Talimat içerisinde <b>$isim</b>, <b>$surum</b>, <b>$devir</b> ve <b>$kaynak</b> değişkenleri de ilgili paketin bilgilerini içermektedir.
	$kaynak kısmında görüleceği gibi paketin kaynak kodlarının indirileceği adres ve alt satırda da (bkz: bash dizi değişken)
	ffmpeg için ihtiyaç duyulan bir yama (patch) dosyası görülüyor.
	<br><br>
	   Yukarıdaki talimat paketlenmek istendiğinde sırasıyla önce $kaynak adresinden kaynak kodları indirilecek ve $SRC ile belirtilen klasöre açılacak (extract), ffmpeg.patch
	dosyası da $SRC kopyalanacak ve <b>derle()</b> fonksiyonu çalıştırılacaktır. Fonksiyon çalıştırıldığında içerisinde cd, patch vb. bash komutları çalıştırılacaktır. Burada dikkat
	edilmesi gereken 2 sabit değişken <b>$SRC</b> ve <b>$PKG</b>'dir. $SRC yukarıda bahsedildiği gibi sıkıştırılmış dosya ve ek yan dosyaların taşındığı klasörü, $PKG ise paketlenecek
	(sıkıştırılıp mps.lz haline gelecek) klasörü işaret eden değişkendir.
	<br><br>
	xx.mps.lz dosyaları birer sıkıştırılmış dosyasıdır. Derleme sonrası tüm dosyalar kurulduğu sistemde kopyalanacağı klasör hiyerarşisine göre düzenlenir ve sıkıştırılır.
	<br><br>  
	  Talimat hazırlarken unutulmaması gerken en önemli konu paketin hazırlanması için kullanılan $PKG dizininin tamamen boş olduğudur. Örneğin siz paketinizdeki yani
	  $SRC/usr/share/icons/logo.png dosyasını $PKG/usr/share/icons/ altına kopyalamak isterseniz önce mkdir -p $PKG/usr/share/icons/ klasör yapısını oluşturmak zorundasınız.
	<br><br>
	  Hata durumunda veya yeni paket için <code>mps odkp {paket}</code> uyguladığımız da $SRC ve $PKG klasörleri boşaltılmaktadır.
	  
	  
	  
	<br><h2 class="title">Talimat'ın Detaylı İncelenmesi</h2>

	  <b>Gerekler:</b><br>
	  Talimat dosyaları bash script gibi yazılmalı fakat bahsedildiği gibi standartlar işleri kolaylaştırmak ve hızlandırmak için kullanılmaktadır.
	  Örneğin <code>Gerekler:</code> kısmına gireceğiniz uygulamaların ya daha önce paketlenmiş olması ya da talimat dosyasının hazırlanmış olması gerekir.
	  Eğer gerekleri yani bağımlılıkları fazla bir uygulamayı (örn: kde) paketlemeyi düşünüyorsanız en bağımlılıksız paketinden başlayarak yukarı doğru yani bağımlılığı fazla kısma 
	  doğru ilerlemelisiniz. Örneği daha da detaylandırmak için Audacity ele alalım. 15 adet gerekliliği mevcut, dolayısı ile Audacity'nin paketlenebilmesi için bu 15 uygulamanın 
	  paketlenmiş olması gerekir. Gereklerinde python gibi çok temel uygulamalar da bulunmakta. Python uygulamasının nasıl paketlendiğini incelemek için
	  <a href="https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/p/python/talimat" target="_blank">https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/p/python/talimat</a> adresini inceleyebilirsiniz.
	  
	  <br><br>
	  
	  <b>kaynak:</b><br>
	  Kaynak değişkeni bash scripting de dizi değişkendir. Belirtilen dosyanın $SRC klasörüne indirilmesini ve açılmasını (extract) sağlar. Eğer indirilecek dosyanın farklı bir isimle kaydedilmesini 
	  isterseniz <code>https://dosya.kaynagi.adresi/abc-uygulamasi.tar.gz::abc.tar.gz</code> şeklinde belirtebilirsiniz. Eğer birden fazla dosya var ise yukarıdaki örnekteki gibi alt satıra 
	  tanımlamanız gerekmektedir. Belirtilen dosyalar lokalde ise direkt dosya adı, indirilecek ise adresini yazabilirsiniz.
	  Kaynak kod git sürüm takip sistemi ile edinilecek ise <a href="https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/m/myrddin/talimat" target="_blank">myrddin</a> talimat örneğindeki
	  <b>git_indir</b> fonksiyonunu ve kullanımını incelemelisiniz.

	  <br><br>

	  Kaynak ile ilgili bir diğer önemli konu ise belirtilen dosya <b>/sources</b> klasörüne indirilir. Eğer dosya orada duruyor ise bu durumda sunucudaki dosyada değişiklik olsa bile indirilmez.
	  Bu yüzden dosya adının farklı olması gerektiğine (::dosya-$surum.tar.gz) dikkat edilmelidir veya paketleme sırasında /sources klasöründeki dosya silinmelidir. 

	  <br><br>
	  
	  <b>Grup:</b><br>
	  Mevcut kullanılabilir grupları <code>mps gruplar</code> komutu ile listeleyebilirsiniz. Yazdığınız talimatın hangi
	  grupta yer alması gerektiğine emin olamadığınız durumlar da mevcut yayınlanmış paketlerin talimat dosyalarını
	  inceleyerek karar verebilirsiniz.

	  <br><br>
	  
	  <b>Paketleme İşlemi öncesi veya sonrasında yapılacak işlemler:</b><br>
	  Talimat dosyasının bulunduğu klasöre aşağıdaki gibi dosyalar oluşturularak paketin kurulmasından önce ve sonra, paket silinmeden önce ve sonra yapılması gereken işlemleri tanımlayabilirsiniz:
	  <ol>
		<li>paket-adi.<b>kur-kos</b>: Paket kurulduktan sonra çalıştırılacak olan bash işlemleri</li>
		<li>paket-adi.<b>kos-kur</b>: Paket kurulmadan <u>önce</u> çalıştırılacak olan bash işlemleri</li>
		<li>paket-adi.<b>sil-kos</b>: Paket silindikten sonra çalıştırılacak olan bash işlemleri</li>
		<li>paket-adi.<b>kos-sil</b>: Paket silmeden <u>önce</u> çalıştırılacak olan bash işlemleri</li>
	  </ol>

	  <b>NOT:</b>Arch Linux (-a) ve KaOSx Linux (-k) paket talimatlarının Milis Linux talimatına hızlıca çevrilebilmesi için:
	  <br>
	  ```
	  talimat.py -a <paket-adi> #Arch talimatları için
	  talimat.py -k <paket-adi> #KaOSx talimatları için
	  ```
	  şeklinde kullanabilirsiniz. Paket adları ilgili depolardan öncelikle kontrol edilmelidir.
	  
	  <br><br>
	  <b>NOT2:</b> Talimat dosyasının bulunduğu klasör de talimatı test etmek veya basit paketlerin hızlıca oluşturulmasını sağlamak isteyebilirsiniz. Bunun için <b>mpsd -d</b> komutu ile talimat dosyasını ve bağımlılıklarını kontrol ederek paketi oluşturur.
	  <b>mpsd</b> tek başına talimatın olduğu klasörde çalıştırılır ise bağımlılıklarını kontrol etmeden paketi derleyip oluşturur.


	<br><h2 class="title">Talimat ve Güvenlik</h2>
		Talimat dosyalarında kaynak kısımda belirtilen dosyanın değiştirilmediğinden emin olmak için <b>paket-adi.hash</b> dosyasına dosyanın hash değerini (sha256 / sha512 vb.) yanında dosya adı formatıyla (shasum dosya-adi.tar.gz çıktısında olduğu gibi) ve her satıra bir dosya gelecek şekilde belirtilmelidir.
		Böylelikle kaynak kodu indirilen dosya öncelikle hash kontrolünden geçirilecek ve daha sonra paketleme işlemine tabi tutulacaktır.
		<a href="https://www.notabug.org/milislinux/milis/src/master/talimatname/genel/w/wireguard-kernel/" target="_blank">wireguard-kernel</a> paketindeki hash örneği incelenebilir.

	<br><br><br><br>

	</b>
	</div>
</div>

<?php include "../footer.html"; ?>

</body>
</html>
